package config

// Config 保存应用程序的运行时配置
type Config struct {
	// 输出格式: json, text, pretty
	Format string

	// 输出文件路径 (空表示标准输出)
	OutputFile string

	// 详细级别
	Verbose bool

	// 完整转储模式 - 收集所有内容并保存到JSON文件
	FullDumpToFile bool

	// 模块选择标志
	Modules ModuleConfig

	// SMART分析选项
	SMARTAnalyze       bool   // 执行深度SMART分析
	SMARTHistory       bool   // 显示历史趋势
	SMARTHistoryPeriod string // 历史期间 (例如: "7d")
	SMARTDBPath        string // 历史数据库路径
	SMARTAlerts        bool   // 检查并发送警报

	// 轮询监控模式
	Stream         bool // 启用轮询监控模式
	StreamInterval int  // 轮询间隔时间（秒）

	// API模式
	API     bool // 启用API服务器模式
	APIPort int  // API服务器端口
	// KillPorts []int // 当提供端口列表时，尝试终止监听这些端口的进程
}

// ModuleConfig 控制要收集的信息模块
type ModuleConfig struct {
	All       bool
	System    bool
	CPU       bool
	Memory    bool
	Disk      bool
	Network   bool
	Ports     bool
	Process   bool
	SMART     bool
	GPU       bool
	Battery   bool
	Activity  bool
	KillPorts []int // 当提供端口列表时，尝试终止监听这些端口的进程
}

// NewConfig 创建默认配置
func NewConfig() *Config {
	return &Config{
		Format:     "pretty",
		OutputFile: "",
		Verbose:    false,
		Modules: ModuleConfig{
			All: true,
		},
		Stream:         false,
		StreamInterval: 5, // 默认5秒轮询一次
		API:            false,
		APIPort:        8080, // 默认API端口
	}
}

// ShouldCollect 确定是否应该收集模块
func (c *Config) ShouldCollect(module string) bool {
	if c.Modules.All {
		return true
	}

	switch module {
	case "system":
		return c.Modules.System
	case "cpu":
		return c.Modules.CPU
	case "memory":
		return c.Modules.Memory
	case "disk":
		return c.Modules.Disk
	case "network":
		return c.Modules.Network
	case "ports":
		return c.Modules.Ports
	case "process":
		return c.Modules.Process
	case "activity":
		return c.Modules.Activity
	case "smart":
		return c.Modules.SMART
	case "gpu":
		return c.Modules.GPU
	case "battery":
		return c.Modules.Battery
	default:
		return false
	}
}
